package cl.portal.escolares.action;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cl.portal.escolares.DAO.DAOAlumno;
import cl.portal.escolares.DAO.DAOApoderado;
import cl.portal.escolares.DAO.DAOColegio;
import cl.portal.escolares.DAO.DAOCurso;
import cl.portal.escolares.DAO.DAOFormaPago;
import cl.portal.escolares.DAO.DAOFurgon;
import cl.portal.escolares.DAO.DAOPago;
import cl.portal.escolares.DAO.DAOUsuario;
import cl.portal.escolares.domain.Alumno;
import cl.portal.escolares.domain.Apoderado;
import cl.portal.escolares.domain.Colegio;
import cl.portal.escolares.domain.Curso;
import cl.portal.escolares.domain.FormaPago;
import cl.portal.escolares.domain.Furgon;
import cl.portal.escolares.domain.Pago;
import cl.portal.escolares.domain.Usuario;

import com.opensymphony.xwork2.ActionSupport;

public class PagoDeleteAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private static Log _log = LogFactory.getLog(AlumnoEditAction.class);

	private Usuario usuario;
	private Long usuarioId;
	private Apoderado apoderado;
	private Long apoderadoId;
	private Alumno alumno;
	private Long alumnoId;
	private Long pagoId;
	private Pago pago;
	private List<Pago> pagos;
	private Long formaPagoId;
	private List<Furgon> furgones;
	private List<Colegio> colegios;
	private List<Curso> cursos;
	private List<FormaPago> formasPago;
	private HashMap<Long, String> formasPagoMap;

	private String pagosPendientes;
	private String pagosRealizados;
	
	private HashMap<Long, String> fechaMap;
	private HashMap<Long, String> fechaPagoMap;

	public String execute() throws Exception {
		SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
		try {
			formasPago = DAOFormaPago.list();
			fechaMap = new HashMap<Long, String>();
			fechaPagoMap = new HashMap<Long, String>();
			formasPagoMap = new HashMap<Long, String>();

			for (FormaPago fp : formasPago)
				formasPagoMap.put(fp.getFormaPagoId(), fp.getDescripcion());

			pago = DAOPago.get(getPagoId());
			if (getUsuarioId() != null && getUsuarioId() > 0)
				setUsuario(DAOUsuario.get(getUsuarioId()));
			else
				setUsuario(DAOUsuario.get(pago.getUsuarioId()));
			pago.setActivo(false);
			DAOPago.update(pago);
			Alumno al = DAOAlumno.get(pago.getAlumnoId());
			al.setAnualidad(al.getAnualidad() - pago.getMonto());
			DAOAlumno.update(al);
			setAlumno(al);
			setApoderado(DAOApoderado.get(pago.getApoderadoId()));
			setPagos(DAOPago.list(usuario.getUsuarioId(), alumno.getAlumnoId(),
					apoderado.getApoderadoId(), null, null, null, null, null,true));
			for (Pago p : pagos) {
				fechaMap.put(p.getPagoId(), sd.format(p.getFecha()));
				fechaPagoMap.put(p.getPagoId(), sd.format(p.getFechaPago()));
				
			}
			setFechaMap(fechaMap);
			setFechaPagoMap(fechaPagoMap);
			Curso curso = DAOCurso.get(alumno.getCursoId());
			Colegio colegio = DAOColegio.get(curso.getColegioId());

			setFurgones(DAOFurgon.list(usuario.getUsuarioId(), null, true));
			setColegios(DAOColegio.list(true));
			setCursos(DAOCurso.list(colegio.getColegioId(), true));
			setPagosPendientes("1");// crear logica de calculo de pagos
									// pendientes y realizados
			setPagosRealizados("1");

			return "success";
		} catch (Exception e) {
			_log.error(e);
			addActionError(getText("error.login"));
			return "error";
		}
	}

	public static Log get_log() {
		return _log;
	}

	public static void set_log(Log _log) {
		PagoDeleteAction._log = _log;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Long getUsuarioId() {
		return usuarioId;
	}

	public void setUsuarioId(Long usuarioId) {
		this.usuarioId = usuarioId;
	}

	public Apoderado getApoderado() {
		return apoderado;
	}

	public void setApoderado(Apoderado apoderado) {
		this.apoderado = apoderado;
	}

	public Long getApoderadoId() {
		return apoderadoId;
	}

	public void setApoderadoId(Long apoderadoId) {
		this.apoderadoId = apoderadoId;
	}

	public Alumno getAlumno() {
		return alumno;
	}

	public void setAlumno(Alumno alumno) {
		this.alumno = alumno;
	}

	public Long getAlumnoId() {
		return alumnoId;
	}

	public void setAlumnoId(Long alumnoId) {
		this.alumnoId = alumnoId;
	}

	public String getPagosPendientes() {
		return pagosPendientes;
	}

	public void setPagosPendientes(String pagosPendientes) {
		this.pagosPendientes = pagosPendientes;
	}

	public String getPagosRealizados() {
		return pagosRealizados;
	}

	public void setPagosRealizados(String pagosRealizados) {
		this.pagosRealizados = pagosRealizados;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Long getPagoId() {
		return pagoId;
	}

	public void setPagoId(Long pagoId) {
		this.pagoId = pagoId;
	}

	public Pago getPago() {
		return pago;
	}

	public void setPago(Pago pago) {
		this.pago = pago;
	}

	public List<Pago> getPagos() {
		return pagos;
	}

	public void setPagos(List<Pago> pagos) {
		this.pagos = pagos;
	}

	public Long getFormaPagoId() {
		return formaPagoId;
	}

	public void setFormaPagoId(Long formaPagoId) {
		this.formaPagoId = formaPagoId;
	}

	public List<Furgon> getFurgones() {
		return furgones;
	}

	public void setFurgones(List<Furgon> furgones) {
		this.furgones = furgones;
	}

	public List<Colegio> getColegios() {
		return colegios;
	}

	public void setColegios(List<Colegio> colegios) {
		this.colegios = colegios;
	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public List<FormaPago> getFormasPago() {
		return formasPago;
	}

	public void setFormasPago(List<FormaPago> formasPago) {
		this.formasPago = formasPago;
	}

	public HashMap<Long, String> getFormasPagoMap() {
		return formasPagoMap;
	}

	public void setFormasPagoMap(HashMap<Long, String> formasPagoMap) {
		this.formasPagoMap = formasPagoMap;
	}

	public HashMap<Long, String> getFechaMap() {
		return fechaMap;
	}

	public void setFechaMap(HashMap<Long, String> fechaMap) {
		this.fechaMap = fechaMap;
	}

	public HashMap<Long, String> getFechaPagoMap() {
		return fechaPagoMap;
	}

	public void setFechaPagoMap(HashMap<Long, String> fechaPagoMap) {
		this.fechaPagoMap = fechaPagoMap;
	}
}
